/*
 * Copyright:  2018 smarabbit studio.
 *
 *  Licensed under the Confluent Community License; you may not use this file
 *  except in compliance with the License.  You may obtain a copy of the License at
 *
 *  http://www.confluent.io/confluent-community-license
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 *  WARRANTIES OF ANY KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations under the License.
 *
 *  @作   者： 黄开晖 (117227773@qq.com)
 *  @日   期:  2021年9月2日
 */
package com.massyframework.beanskin.runtime.service.crypto;

import java.security.Security;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.massyframework.beanskin.framework.FrameworkConfig;
import com.massyframework.beanskin.launching.LaunchingHandler;
import com.massyframework.beanskin.service.crypto.RSAKeyReader;
import com.massyframework.beanskin.service.crypto.RSAService;
import com.massyframework.beanskin.util.exceptioncollect.ExceptionCollectUtils;

/**
 * Bouncycastle服务初始化
 * @author huangkh
 *
 */
public final class BCRServiceInitializer implements LaunchingHandler {

	private Logger logger = LoggerFactory.getLogger(BCRServiceInitializer.class);
	/**
	 * 
	 */
	public BCRServiceInitializer() {
		
	}
	
	@Override
	public void init(FrameworkConfig config) {
		Security.addProvider(new BouncyCastleProvider());

		RSAKeyReader reader = new BCRSAKeyReader();
		config.defineExportService(RSAKeyReader.class.getName(), reader, builder->{
			builder.addExportService(RSAKeyReader.class)
			.description("ras密钥读取服务")
			.topRanking();
		});
        
		try {
	        RSAService rsaService = new BCRSAService();
	        config.defineExportService(RSAService.class.getName(), rsaService, builder->{
	        	builder.addExportService(RSAService.class)
	        		.name("bouncycastle")
	        		.description("ras服务")
	        		.topRanking();
	        });
		}catch(Exception e) {
			if (logger.isErrorEnabled()) {
				logger.error(e.getMessage(), e);
			}
			
			ExceptionCollectUtils.addException(e);
		}
	}

}
